<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>立即执行函数</title>
  </head>

  <body>

  </body>
  <script>
    /* 
    立即执行函数:函数定义完后被立即执行
       特点：执行完后会立即销毁
     */

    //1.声明式函数
    /*
    function func() {
      console.log("我是声明式函数");
    } //(),后面会报错，因为这里不是表达式
   */
    //1.1 改进一：对函数加上();声明式函数立即执行函数调用
    /*
    (function func() {
      console.log("我是声明式函数");
    })()
    func(); //会报错，func is not defined，所以不要命名函数表达式]
    
    */
    //1.2 改进二：将函数和执行的()一起加上（）
    (function () {
      console.log("我是声明式函数");
    }());
    (function () {
      console.log("我是声明式函数");
    })()
    //2.匿名函数表达式
    var test = function () { //变量test = undefined;因为函数默认返回undefined
      console.log("我是匿名函数表达式");
      return undefined;
    }(); //匿名函数表达式立即执行函数调用
    console.log(test); //undefined
  </script>

</html>